package juego.sprites;

import java.awt.Graphics;
import java.awt.Rectangle;

import javax.swing.ImageIcon;

import juego.util.Coordenadas2D;

public abstract class Entidad {
	
	private Animacion animacion;
	protected Coordenadas2D posicion;
	private boolean entidadActiva;	
	
	public Entidad(int duracionEtapaAnim) {
		this.animacion = new Animacion(duracionEtapaAnim);
		this.posicion = new Coordenadas2D();
		this.entidadActiva = true;
	}
	
	public Entidad(int posX, int posY, int duracionEtapaAnim) {
		this(duracionEtapaAnim);
		this.posicion = new Coordenadas2D(posX, posY);
	}
	
	/**
	 * Actualiza la animacion por defecto.
	 * @param dt
	 */
	public void actualizarAnimacion(double dt) {
		animacion.actualizar(dt);
	}
	
	/**
	 * Pinta el objeto.
	 * @param g
	 */
	public void paint(Graphics g) {
		if (animacion.getNumEtapas() > 0) {
			g.drawImage(animacion.getEstadoActual().getImage(), getXInt(), getYInt(), null);
		}
	}
	
	/**
	 * Agrega una etapa (frame) a la animacion por defecto.
	 * @param img ImageIcon
	 */
	public void agregarEtapaAnimPorDefecto(ImageIcon img) {
		animacion.agregarEtapa(img);
	}

	public Animacion getAnimacionPorDefecto() {
		return animacion;
	}

	public void setAnimacionPorDefecto(Animacion animacion) {
		this.animacion = animacion;
	}
	
	public boolean comprobarColision(Entidad e) {
		return getBounds().intersects(e.getBounds());
	}
	
	public Rectangle getBounds() {
		return new Rectangle(getXInt(), getYInt(), getWidth(), getHeight());
	}

	public double getX() {
		return posicion.getX();
	}

	public void setX(double x) {
		this.posicion.setX(x);
	}

	public double getY() {
		return posicion.getY();
	}

	public void setY(double y) {
		this.posicion.setY(y);
	}
	
	public int getXInt() {
		return (int) getX();
	}
	
	public int getYInt() {
		return (int) getY();
	}
	
	public int getWidth() {
		return animacion.getEstadoActual().getIconWidth();
	}
	
	public int getHeight() {
		return animacion.getEstadoActual().getIconHeight();
	}

	public boolean isEntidadActiva() {
		return entidadActiva;
	}

	public void setEntidadActiva(boolean entidadActiva) {
		this.entidadActiva = entidadActiva;
	}
	
	public Coordenadas2D getPosicion() {
		return posicion;
	}

	public void setPosicion(Coordenadas2D posicion) {
		this.posicion = posicion;
	}
}
